
function Get-UserToken(
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$UserName, 
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$Password,
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$ClientId,
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$ClientSecret,
    [Parameter(Mandatory)][string]$Scope) 
{
    # 定义一个哈希表，用于存储要发送到服务器的 POST 请求数据
    $postData = @{
        grant_type    = "password"; # 授权类型，这里是密码授权
        username      = $UserName; # 用户名，这里是一个电子邮件地址
        password      = $Password; # 用户密码
        client_id     = $ClientId; # 客户端ID，用于标识请求来源的客户端应用
        client_secret = $ClientSecret; # 客户端密钥，用于与客户端ID一起进行身份验证
        scope         = $Scope  # 请求的权限范围
    }

    # 定义请求的URI（统一资源标识符），这里是Gitee的OAuth令牌端点
    $uri = "https://gitee.com/oauth/token"

    # 遍历$postData哈希表的每个键，对每个键的值进行URL编码，并将编码后的键值对以"key=value"的形式连接起来，键值对之间用'&'分隔
    $encodedBody = ($postData.Keys | ForEach-Object {
            "$($_)=$([System.Net.WebUtility]::UrlEncode($postData[$_]))"
        }) -join '&'

    # 使用Invoke-WebRequest命令发送POST请求
    # -Uri参数指定请求的URI
    # -Method参数指定请求方法，这里是POST
    # -ContentType参数指定请求体的内容类型，这里是"application/x-www-form-urlencoded"，表示请求体中的数据是以键值对形式编码的
    # -Body参数指定请求体的内容，这里是编码后的$encodedBody字符串
    $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType "application/x-www-form-urlencoded" -Body $encodedBody

    # 输出响应内容，这里输出的是服务器返回的原始响应体
    $jsonObject = $response.Content | ConvertFrom-Json
    return $jsonObject
}

function Update-UserToken(
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$RefreshToken,
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$ClientId,
    [ValidateNotNullOrEmpty()][Parameter(Mandatory)][string]$ClientSecret
    )
{
    # 定义一个哈希表，用于存储要发送到服务器的 POST 请求数据
    $postData = @{
        grant_type    = "refresh_token"; # 授权类型，这里是密码授权
        client_id     = $ClientId; # 客户端ID，用于标识请求来源的客户端应用
        client_secret = $ClientSecret; # 客户端密钥，用于与客户端ID一起进行身份验证
        refresh_token = $RefreshToken; # 刷新令牌
    }
    # 定义请求的URI（统一资源标识符），这里是Gitee的OAuth令牌端点
    $uri = "https://gitee.com/oauth/token"

    # 遍历$postData哈希表的每个键，对每个键的值进行URL编码，并将编码后的键值对以"key=value"的形式连接起来，键值对之间用'&'分隔
    $encodedBody = ($postData.Keys | ForEach-Object {
            "$($_)=$([System.Net.WebUtility]::UrlEncode($postData[$_]))"
        }) -join '&'

    # 使用Invoke-WebRequest命令发送POST请求
    # -Uri参数指定请求的URI
    # -Method参数指定请求方法，这里是POST
    # -ContentType参数指定请求体的内容类型，这里是"application/x-www-form-urlencoded"，表示请求体中的数据是以键值对形式编码的
    # -Body参数指定请求体的内容，这里是编码后的$encodedBody字符串
    $response = Invoke-WebRequest -Uri $uri -Method POST -ContentType "application/x-www-form-urlencoded" -Body $encodedBody

    # 输出响应内容，这里输出的是服务器返回的原始响应体
    $jsonObject = $response.Content | ConvertFrom-Json
    return $jsonObject
}